package com.example.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

import org.springframework.context.annotation.Configuration;

/**
 * servlet过滤器注解扫描  实现Filter接口
 * 
 * @author yzl
 *
 */

/**
 * 过滤器
 * filter的三种典型应用：
 *1、可以在filter中根据条件决定是否调用chain.doFilter(request, response)方法，即是否让目标资源执行
 *2、在让目标资源执行之前，可以对request\response作预处理，再让目标资源执行
 *3、在目标资源执行之后，可以捕获目标资源的执行结果，从而实现一些特殊的功能
 */
//@WebFilter(filterName = "注解扫描方式",urlPatterns = "/*")
//@Configuration
public class ServletFilter1 implements Filter {

	@Override
	public void destroy() {
		System.out.println("注解扫描方式*过滤器被销毁------>");
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		long start = System.currentTimeMillis();
		System.out.println("注解扫描方式*过滤器正在执行...");
		arg2.doFilter(arg0, arg1);
		System.out.println("Execute cost=" + (System.currentTimeMillis() - start));
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("注解扫描方式*初始化过滤器。");
	}

}
